{# What one meeting came to, drawn the same on the Meetings page and in Overseer's drawer. ``clock`` maps a transcript line's id to its time. #} {% from "components/macros/feedback.html" import empty_state %} {% import "components/macros/layout.html" as layout %} {% from "components/macros/layout.html" import badge, chart_dot %} {# Where the bot is with the call, and how long it was in. #} {% macro status_line(status, length) %} {{ badge(status.label, status.tone) }} {% if length %}{{ length }}{% endif %} {% endmacro %} {% macro failure(meeting) %} {% if meeting.failure_reason %}
{{ meeting.failure_reason }}
{% endif %} {% endmacro %} {# What the bot did on Meet's page (``models.bot``): each control, and how it went where not by its label (Meet's shortcut, or not found), then why it left. A step with what the page showed opens on it: the buttons Meet had, for what a renamed control is called now. #} {% macro bot_steps(steps) %} {% if steps %}{{ s.seen }}
Writing them again failed, so these are the last ones: {{ notes_error }}
{% endif %}{{ notes.summary }}
{% if caller is defined %}{{ caller() }}{% endif %} {{ notes_lists(notes, clock, voices) }} {% elif notes_error %}The notes could not be written: {{ notes_error }}
{% else %}{{ empty }}
{% endif %} {% endmacro %} {# A speaker as the theme marks a source (the logs page's dot): their name in text, after a small dot in their color in this meeting (``voices``). #} {% macro speaker(name, voices, attr="data-speaker") -%} {{ chart_dot(voices.get(name, 1)) }}{{ name }} {%- endmacro %} {% macro items(list, empty, clock, voices=None) %} {% if list %}{{ empty }}
{% endif %} {% endmacro %} {% macro heading(label) %}{{ clock[line.id] }} {{ line.text }}{% for part, name in parts.get(line.id, []) %} {{ ask_about(base, line.id, part, name) }}{% endfor %} {% if asks %}{{ ask_about(base, line.id) }}{% endif %}
{% if asks %}{% endif %} {% endfor %}{{ moment.text }}
{%- endmacro %} {# What the call threw up of one kind (``moments``): each with who said it and when, a button per action it offers (a browser action copies its prompt; the others are asked, at ``base``), and every run asked of it, with where it stands and what it came back with. #} {% macro moments(list, clock, voices, base, hx_body) %} {% from "components/macros/form.html" import action %} {% from "components/macros/layout.html" import copy_button, fold_mark %} {# A run's tone (``RunRecord.tone``) as its dot and its answer's edge. #} {% set dots = {"ok": "bg-aegis-teal", "error": "bg-aegis-error", "muted": "bg-aegis-border"} %} {% set edges = {"ok": "border-aegis-teal", "error": "border-aegis-error", "muted": "border-aegis-border"} %}{% if run.going %}{% endif %}{{ run.label }} · {{ run.state }}
{% if run.result and run.status == 'failed' %}{{ run.result }}
{% elif run.result %}